package BusinessLayer;

import java.util.ArrayList;

import PersistanceLayer.AbstractDAOFactory;

/**
 * Ue faisant reference a un semestre et contenant un ensemble d ecue
 * @author cyrene
 *
 */
public class UE {

	/**
	 * nombre de credits ECTS attribues a l ue
	 */
  private String nbECTS;

  /**
   * le libelle de l ue
   */
  private String libelleUE;

  /**
   * le statut de l'ue optionnel ou non
   */
  private String optionnel;

  /**
   * le code de l ue unique
   */
  private String codeUE;

/**
 * liste des Ecue contenues dans l'UE courante
 */
 private ArrayList<Ecue> ensEcue;
 
 
   /**
   * un UE comprend un enseigant comme responsable
   */
   private Enseignant Responsable;


  
 /**
  * constructeur
  * @param nbECTS nombre de crédits ECTS
  * @param libelleUE libelle de l'UE
  * @param codeUE le code de l'UE
  */
  public UE( String codeUE,String nbECTS, String libelleUE, String optionnel){
	  this.nbECTS=nbECTS;
	  this.libelleUE=libelleUE;
	  this.codeUE=codeUE;
	  this.optionnel=optionnel;	  
	  this.chargementEnsembleEcue();
	  
  }
  /**
   * les liste des etudiants dans cette ue
   */
    public ArrayList<Etudiant>  myEtudiant;
    
    /**
     * le semestre qui contient cette ue
     */
    public Semestre  mySemestre;
    
    /**
     * la liste des matieres qui sont dans l ue
     */
    public ArrayList<Ecue> codeMatiere;

    /**
     * setter du nombre de credits
     * @param nbECTS
     */

   
	public void setNbECTS( String nbECTS) {
		this.nbECTS = nbECTS;
	}

	 /**
     * getter du nombre de credits
     * return le nombre de credits de l ue
     */
	public String getNbECTS() {
		return nbECTS;
	}

	/**
	 * setter du libelle de l ue
	 * @param libelleUE
	 */
	public void setLibelleUE(String libelleUE) {
		this.libelleUE = libelleUE;
	}

	/**
	 * getter du libelle de l ue
	 * @return le libelle de l ue
	 */
	public String getLibelleUE() {
		return libelleUE;
	}

	/**
	 * setter du statut optionnel de l option
	 * @param optionnel
	 */
	public void setOptionnel(String optionnel) {
		this.optionnel = optionnel;
	}

	/**
	 * test si optionnel ou non 
	 * @return vrai ou faux
	 */
	public String getOptionnel() {
		return optionnel;
	}

	/**
	 * setter du code de l ue
	 * @param codeUE
	 */
	public void setCodeUE(String codeUE) {
		this.codeUE = codeUE;
	}

	/**
	 * getter du code de l ue
	 * @return le cod de l ue
	 */
	public String getCodeUE() {
		return codeUE;
	}

        /**
         * getter sur l'ensemble des Ecue de l'UE courante
         * @return un ArrayList d'Ecue
         */
        public ArrayList<Ecue> getEnsEcue()
         {
            return this.ensEcue;
        }

        
        public void chargementEnsembleEcue() {

        	this.ensEcue = AbstractDAOFactory.getFactory(0).getEcueDAO().getListe(this.codeUE);
        	
        }


    /**
     * @return the Responsable
     */
    public Enseignant getResponsable() {
        return Responsable;
    }

    /**
     * @param Responsable the Responsable to set
     */
    public void setResponsable(Enseignant Responsable) {
        this.Responsable = Responsable;
    }

    
    //public Vector  PointJuryUE;
        public String toString(){
        	return "le code ue: "+ codeUE;
        }
        
        /**
         * 
         * @return la liste des libelles des Ecue contenus dans l'objet UE courant
         */
        public ArrayList<String> getEnsNomsEcue() {
        	ArrayList<String> ensnoms = new ArrayList<String>();
        	
        	for(int i=0;i<this.ensEcue.size();i++)
        	{
        		ensnoms.add(this.ensEcue.get(i).getLibelleEcue());
        	}
        	
        	return ensnoms;
        }
        
        public ArrayList<String> getEnsCodeMatiereEcue() {
        	ArrayList<String> ensCodeMatiereEcue = new ArrayList<String>();
        	
        	for(int i=0;i<this.ensEcue.size();i++)
        	{
        		ensCodeMatiereEcue.add(this.ensEcue.get(i).getCodeMatiere());
        	}
        	
        	return ensCodeMatiereEcue;
        }

}